package com.yujiahao.bigdata.rdd.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * TODO distinct（）去重 算子
 * 1、Scala集合去重用的是HashSet，但是是单点集合操作
 * 2、Spark中的RDD的去重，不能使用单点，可能内存不够
 * 3、分布式去重源码：case _ => map(x => (x, null)).reduceByKey((x, _) => x, numPartitions).map(_._1)
 * 4、distinct存在shuffle操作，所以具有改变分区的能力
 *
 */

object Spark_RDD_Pper_Transform_Distinct {
  def main(args: Array[String]): Unit = {


    //TODO 1、获得连接
    val conf: SparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc: SparkContext = new SparkContext(conf)

    val rdd = sc.makeRDD(List(1, 2, 3, 4, 1, 2))

    val value: RDD[Int] = rdd.distinct()
    value.collect().foreach(println)

    //TODO 2、关闭连接
    sc.stop()
  }
}